/**
 * 
 */
package hb_Teach_InitObject_StringMethod;

import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.Scanner;

import org.junit.Test;

/**
 * 
 *   String方法
 * 1、charAt();  获得单个字符串
 * 2、toCharArray();  获得字符串数组
 * 
 *   编码格式转换
 * 1、字符串转字节数组  str.getBytes();    str.getBytes("GBK"); 
 * 2、字节解码成文字  String utfStr= new String(utf8,"utf-8"); utf8 指字节数组
 *                  String gbkStr= new String(gbk,"GBK");   gbk指字符数组
 *
 *   trim()和 strip() 去空格功能
 *  !!! 正则表达式
 *
 * @author Jiang Zhiyan
 *
 * 2021年5月6日 上午10:51:14
 */
public class StringAPITest {
	@Test
   public void charTest() {
	   String str= "Hello World";
	   for(int i=0;i<str.length();i++) {
		   char c= str.charAt(i);
		   System.out.print(c);
	   }
   }
	
	@Test
	public void toCharArrayTest() {
		String str= "Hello World";
		char[] array = str.toCharArray();  // toCharArray将字符串转换成字符串数组
		System.out.println(Arrays.toString(array)); //将字符转换成字符串，表示方式：[ , , , ]
	    for(char i:array) {
	    	System.out.print(i);
	    }
	}
	
	@Test
	public void toByteTest() throws UnsupportedEncodingException {
		//utf-8采用三个Byte表示一个中文
		String str= "a 中国";
		byte[] bytes = str.getBytes();
		System.out.println(Arrays.toString(bytes));
	    //gbk采用两个Byte表示一个中文
		byte[] gbk = str.getBytes("GBK");
		System.out.println(Arrays.toString(gbk));
	}
	
	@Test
	public void byteToStringTest() throws UnsupportedEncodingException {
	 byte[]	utf8= {97, 32, -28, -72, -83, -27, -101, -67};
//	 UTF-8 (utf-16) GBK(GB23122)  ISO-8859-1(不能表示中文)
 	 String utfStr= new String(utf8,"utf-8");  //该语句用来将字节解码成文字
	 System.out.println(utfStr);
	 byte[]	gbk= {97, 32, -42, -48, -71, -6};
	 String gbkStr= new String(gbk,"GBK");
	 System.out.println(gbkStr);
	}
	
	@Test
	public void trimTest() {
		String str= " \u202F A B C  \u001E";
//		\u202F表示空格，不受trim控制，\u001E空格无效
		System.out.println(str);
		System.out.println(str.trim());  //该方法用于删除字符串的头尾空白符
		System.out.println(str.strip());  //jdk11提供的新API
	}
	@Test
	//定义身份证的正则
	public void telNumberTest() {
		String telRegex="1[3-9]\\d{9}";
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			String data = sc.nextLine();
			System.out.println(data.matches(telRegex));
		}
	}
	@Test
	//定义身份证的正则
	public void numTest() {
		String num="\\d{17}[0-9xX]";
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			String data = sc.nextLine();
			System.out.println(data.matches(num));
		}
	}
	
	@Test
	public void toStringTest() {
		int [] arr= {1,2,3,4};
		System.out.println(Arrays.toString(arr));
	}
}
